About the game

Help Scorchie, a friendly and hiperactive will-o'-wisp, to save his friends agains a mysterious and perverse sludge while venturing out into a vast and diverse world in this tight platformer game! Brave dozens of challenges, uncover secrets and piece together the mistery of the purple sludge using Scorchie's dash abilities!

Project info

Interactive objects

Interface Interactive Object class Obstacle class Trigger Object

All the objects inherit from the parent class 'interactive object', there are two types: obstacle and trigger object. the obstacle type reacts to the player and the enviromment, while the trigger, activate events that can change the game, level layout or other objects.

Enemies

Enemies Enemies
  • All the enemy classes inherit from the base abstract class Enemy
  • Flying enemy: can fly
  • Patrol enemy: move left-right
  • Static enemy: attacks the player when in range

Shaders

Fire shader
Fire Shader Fire Shader

How it works?
The shader is a sprite lit shader made in the Shader Graph Editor. Is is divided in two different effects: dissolve and glowing border.

Dissolve effect:
  1. Get the mesh vertex
  2. Add a simple noise to create a random fire feeling
  3. A step node with a normalized float paremeter controls the dissolve progress
  4. Then multiply with the alpha value of the texture and apply the output in the alpha node on the Fragment
Glowing border effect:
  1. By subtracting by a tiny amount the offset, the border creates a line along the dissolve effect
  2. Add a step node and connects with the same Simple Noise node of the dissolve effect
  3. Subtract both Step Nodes
  4. Multiply the Dissolve effect output with the Glowing Border effect
  5. Multiply by a color parameter
  6. Add the output to the RGBA value of the sample texture, then conects to the base color


Water shader
Noise creation Output Output

How it works?
The shader is an unlit shader made in the Shader graph editor. It utilizes a camera to capture the movement and then shows a reflection on a texture. To create the wave effect, it is used one script for the Water waves and another to create an instance of the material used by the camera.

Water:
  1. Create a noise generation using a Time and Gradient Noise nodes
  2. The noise output is passed into a Remap node, mapping the values from [0, 1] to [-0.002, 0.002]. This gives a subtle distortion.
  3. The remapped value is then multiplied with a Vector2 (X = 1, Y = 1) to allow direction-based scaling.
  4. Apply the distorted UVs on the Sample Texture 2D node
  5. The color is defined by a variable "Color"
Water wave movement scripts:
Noise creation Output Output

  1. Mesh Generation
    • A 2D water mesh is built from vertical strips, each with two vertices (top and bottom).
    • The number of vertical strips = numSprings.
    • Triangles and UVs are generated to form a water surface plane.
  2. Spring System
    • Each strip is controlled by a Spring instance that stores:
    • weightPosition: vertical displacement (wave height)
    • velocity and acceleration: for physics simulation
    • sineOffset: for continuous sinusoidal waves
    • Springs are updated every frame based on:
    • Hooke's Law: F = -k * x (spring force)
    • Damping: to smoothen movement
    • Neighbor propagation: waves influence nearby springs
    • Sine wave (if enabled) adds regular oscillations across the surface.
  3. Mesh Update
    • The top vertex of each strip is moved vertically based on the spring’s weightPosition and sineOffset.
    • The mesh is updated and recalculated each frame to reflect these vertex changes.
  4. Interactive Ripples
    • When objects with Rigidbody2D enter or exit the water (OnTriggerEnter2D / Exit2D), the nearest spring is displaced up or down (via Ripple()).
    • This creates a local splash that propagates over time.
    • An optional splashParticle is instantiated at the contact point.

Sound System

Sound Manager Sounds Type

The SoundsManager class is a singleton that provides a global way to play: Sound effects (SFX) categorized by type (UI, Player, Enemy, etc.) Music tracks, including smooth fade transitions between songs

The Audio Event is a simple class that contains an audio clip and the audio name. The audio name is used to find the audio from the array.